package com.coderman.infosys.auth.domain.bo.system;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.coderman.infosys.auth.domain.bo.BaseBOV2;
import com.coderman.infosys.plat.auth.common.bo.BaseBO;
import lombok.Data;
import lombok.ToString;

/**
* @Description:系统管理类
* @Author:shenshuai
* @CreateTime:2022-01-02 15:27:38
* @version v1.0
*/
//系统即是聚合根也是实体
@Data
@ToString
public class SystemBO extends BaseBOV2 {

   public SystemBO(){
   }

   public SystemBO(String systemCode) {
      this.systemCode = systemCode;
   }

   /** 主键ID **/
   private Long id;

   /** 系统名称 **/
   private String systemName;

   /** 系统标示 **/
   private String systemCode;

   /** 系统域名 **/
   private String systemUrl;

   /** 系统图标 **/
   private String systemPicurl;

   /** 系统技术负责人 **/
   private Long tecAdminUserId;

   /** 系统业务负责人 **/
   private Long busAdminUserId;

   /** 系统当前所在部门 **/
   private Long departmentId;

   private Integer status;

   /** 系统模块列表 **/
   private List<ModuleBO> moduleBOList;


   /**
    * 将moduleBO关联到系统这个聚合根下
    * 这是系统聚合根的行为
    * 或者作为系统聚合根本身的职责能力
    * @param moduleBO
    */
   public void addModule(ModuleBO moduleBO){
      if(this.moduleBOList == null){
         this.moduleBOList = new ArrayList<>();
      }
      this.moduleBOList.add(moduleBO);
   }

   /**
    * 只根据实体对象构建一个系统实体
    * @param systemCode
    * @return
    */
   public static SystemBO ofIdentifer(String systemCode){
      return new SystemBO(systemCode);
   }

   /**
    * 根据系统实体构建一个系统聚合根
    * @param systemCode
    * @param menuCodeMap
    * @return
    */
   public static SystemBO ofIdentifer(String systemCode, Map<String,List<String>> menuCodeMap){
      return new SystemBO(systemCode);
   }


}